package com.umeox.phone.util;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.KeyEvent;


public class CacheUtils {
    private final static String SP_NAME = "device_config";
    public final static String KEY_CALL_MONITORING = "callMonitoring";
    public static final String KEY_CALL_STATE_RINGING = "callStateRinging";
    public static final String KEY_CALL_STATE_CALLING = "callStateCalling";

    private static SharedPreferences mPreferences;

    private static SharedPreferences getSp(Context context) {
        if (mPreferences == null) {
            mPreferences = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
        }

        return mPreferences;
    }

    /**
     * 判断是否正在通话中
     *
     * @param context
     * @return
     */
    public static boolean isCallStateCalling(Context context) {
        SharedPreferences sp = getSp(context);
        return sp.getBoolean(KEY_CALL_STATE_CALLING, false);
    }

    /**
     * 设置通话中状态
     * @param context
     * @param callStateCalling
     */
    public static void setCallStateCalling(Context context, boolean callStateCalling) {
        setBoolean(context, KEY_CALL_STATE_CALLING, callStateCalling);
    }

    /**
     * 判断是否正在响铃
     *
     * @param context
     * @return
     */
    public static boolean isCallStateRinging(Context context) {
        SharedPreferences sp = getSp(context);
        return sp.getBoolean(KEY_CALL_STATE_RINGING, false);
    }

    /**
     * 设置响铃状态
     * @param context
     * @param callStateRinging
     */
    public static void setCallStateRinging(Context context, boolean callStateRinging) {
        setBoolean(context, KEY_CALL_STATE_RINGING, callStateRinging);
    }

    /**
     * 判断是否在使用监听通话
     *
     * @param context
     * @return
     */
    public static boolean isCallMonitoring(Context context) {
        SharedPreferences sp = getSp(context);
        return sp.getBoolean(KEY_CALL_MONITORING, false);
    }

    /**
     * 设置监听通话状态
     * @param context
     * @param callMonitoring
     */
    public static void setCallMonitoring(Context context, boolean callMonitoring) {
        setBoolean(context, KEY_CALL_MONITORING, callMonitoring);
    }

    /**
     * 通过SP获得boolean类型的数据，没有默认为false
     *
     * @param context : 上下文
     * @param key     : 存储的key
     * @return
     */
    public static boolean getBoolean(Context context, String key) {
        SharedPreferences sp = getSp(context);
        return sp.getBoolean(key, false);
    }

    /**
     * 通过SP获得boolean类型的数据，没有默认为false
     *
     * @param context  : 上下文
     * @param key      : 存储的key
     * @param defValue : 默认值
     * @return
     */
    public static boolean getBoolean(Context context, String key, boolean defValue) {
        SharedPreferences sp = getSp(context);
        return sp.getBoolean(key, defValue);
    }

    /**
     * 设置boolean的缓存数据
     *
     * @param context
     * @param key     :缓存对应的key
     * @param value   :缓存对应的值
     */
    public static void setBoolean(Context context, String key, boolean value) {
        SharedPreferences sp = getSp(context);
        Editor edit = sp.edit();// 获取编辑器
        edit.putBoolean(key, value);
        edit.commit();
    }

    /**
     * 通过SP获得String类型的数据，没有默认为null
     *
     * @param context : 上下文
     * @param key     : 存储的key
     * @return
     */
    public static String getString(Context context, String key) {
        SharedPreferences sp = getSp(context);
        return sp.getString(key, null);
    }

    /**
     * 通过SP获得String类型的数据
     *
     * @param context  : 上下文
     * @param key      : 存储的key
     * @param defValue : 默认值
     * @return
     */
    public static String getString(Context context, String key, String defValue) {
        SharedPreferences sp = getSp(context);
        return sp.getString(key, defValue);
    }

    /**
     * 设置String的缓存数据
     *
     * @param context
     * @param key     :缓存对应的key
     * @param value   :缓存对应的值
     */
    public static void setString(Context context, String key, String value) {
        SharedPreferences sp = getSp(context);
        Editor edit = sp.edit();// 获取编辑器
        edit.putString(key, value);
        edit.commit();
    }

    /**
     * 通过SP获得Long类型的数据，没有默认为-1
     *
     * @param context : 上下文
     * @param key     : 存储的key
     * @return
     */
    public static long getLong(Context context, String key) {
        SharedPreferences sp = getSp(context);
        return sp.getLong(key, -1);
    }

    /**
     * 通过SP获得Long类型的数据
     *
     * @param context  : 上下文
     * @param key      : 存储的key
     * @param defValue : 默认值
     * @return
     */
    public static long getLong(Context context, String key, long defValue) {
        SharedPreferences sp = getSp(context);
        return sp.getLong(key, defValue);
    }

    /**
     * 设置Long的缓存数据
     *
     * @param context
     * @param key     :缓存对应的key
     * @param value   :缓存对应的值
     */
    public static void setLong(Context context, String key, long value) {
        SharedPreferences sp = getSp(context);
        Editor edit = sp.edit();// 获取编辑器
        edit.putLong(key, value);
        edit.commit();
    }


    public static int getInt(Context context, String key) {
        SharedPreferences sp = getSp(context);
        return sp.getInt(key, 0);
    }

    public static int getInt(Context context, String key, int defValue) {
        SharedPreferences sp = getSp(context);
        return sp.getInt(key, defValue);
    }

    public static void setInt(Context context, String key, int value) {
        SharedPreferences sp = getSp(context);
        Editor edit = sp.edit();// 获取编辑器
        edit.putInt(key, value);
        edit.commit();
    }
}
